package com.example.markdownviewer;

import android.content.Context;
import android.content.SharedPreferences;
import android.net.Uri;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * 管理最近打开的文件
 */
public class RecentFilesManager {

    private static final String PREFS_NAME = "RecentFilesPrefs";
    private static final String KEY_RECENT_FILES = "recent_files";
    private static final int MAX_RECENT_FILES = 10; // 最多保存10个最近文件

    private final Context context;
    private final SharedPreferences prefs;

    public RecentFilesManager(Context context) {
        this.context = context;
        this.prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
    }

    /**
     * 添加文件到最近文件列表
     * @param uri 文件URI
     * @param fileName 文件名
     */
    public void addRecentFile(Uri uri, String fileName) {
        if (uri == null || fileName == null) return;

        // 获取当前的最近文件列表
        Set<String> recentFiles = getRecentFilesSet();
        
        // 创建新的条目（URI + 文件名，用 ":" 分隔）
        String fileEntry = uri + ":" + fileName;
        
        // 如果已存在，先移除旧的条目
        Set<String> updatedFiles = new HashSet<>();
        for (String entry : recentFiles) {
            if (!entry.startsWith(uri + ":")) {
                updatedFiles.add(entry);
            }
        }
        
        // 添加新条目到列表开头
        List<String> filesList = new ArrayList<>(updatedFiles);
        filesList.add(0, fileEntry);
        
        // 如果超过最大数量，移除最旧的条目
        if (filesList.size() > MAX_RECENT_FILES) {
            filesList = filesList.subList(0, MAX_RECENT_FILES);
        }
        
        // 保存更新后的列表
        SharedPreferences.Editor editor = prefs.edit();
        editor.putStringSet(KEY_RECENT_FILES, new HashSet<>(filesList));
        editor.apply();
    }

    /**
     * 获取最近文件列表
     * @return 最近文件列表，每个条目包含URI和文件名
     */
    public List<RecentFile> getRecentFiles() {
        Set<String> recentFilesSet = getRecentFilesSet();
        List<RecentFile> recentFiles = new ArrayList<>();
        
        for (String entry : recentFilesSet) {
            String[] parts = entry.split(":", 2);
            if (parts.length == 2) {
                Uri uri = Uri.parse(parts[0]);
                String fileName = parts[1];
                recentFiles.add(new RecentFile(uri, fileName));
            }
        }
        
        return recentFiles;
    }

    /**
     * 清除最近文件列表
     */
    public void clearRecentFiles() {
        SharedPreferences.Editor editor = prefs.edit();
        editor.remove(KEY_RECENT_FILES);
        editor.apply();
    }

    /**
     * 获取原始的最近文件集合
     */
    private Set<String> getRecentFilesSet() {
        return prefs.getStringSet(KEY_RECENT_FILES, new HashSet<>());
    }

    /**
     * 最近文件数据类
     */
    public static class RecentFile {
        private final Uri uri;
        private final String fileName;

        public RecentFile(Uri uri, String fileName) {
            this.uri = uri;
            this.fileName = fileName;
        }

        public Uri getUri() {
            return uri;
        }

        public String getFileName() {
            return fileName;
        }
    }
}